"""
由于django自带的登录方式是用户名和密码,我们还需要使用手机号登录
这样的话,django自带的认证后端就不能使用,我们需要重写
"""
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.hashers import check_password
from users.models import Users
from django.db.models import Q


class AuthBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        """重写此方法"""
        # 1,用户输入的可能是用户名或手机号
        try:
            user = Users.objects.get(Q(username=username) | Q(mobile=username))
        except Exception as e:
            print(e)
            return None
        # 密码校验
        is_correct = check_password(password, user.password)
        if is_correct:
            return user
        else:
            print("密码校验错误")
            return None
